package gwtupload.client; import java.util.ArrayList; import java.util.List; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.dom.client.InputElement; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.FileUpload; /** * Extends GWT's Fileupload class as that one does not support the HTML5 feature of a * multiple-select uploader. * * @author ebluemelhuber * */ public class MultipleFileUpload extends FileUpload { public MultipleFileUpload() { super(); // By default multiple is enabled; enableMultiple(true); } public List<String> getFilenames() { ArrayList<String> result = new ArrayList<String>(); JavaScriptObject rawFileList = getElement().getPropertyJSO("files"); if (rawFileList == null) { result.add(InputElement.as(getElement()).getValue()); // IE does not support multiple-select } else { FileList fileList = rawFileList.cast(); for (int i = 0; i < fileList.getLength(); ++i) { result.add(fileList.item(i).getName()); } } return result; } public void enableMultiple(boolean b) { String attr = "multiple"; if (b) { getElement().setAttribute(attr, attr); } else { getElement().removeAttribute(attr); } } public void setAccept(String accept) { getElement().setAttribute("accept", accept); } }